home *** CD-ROM | disk | FTP | other *** search
- Newsgroups: comp.sources.misc
- organization: Multihouse NV, the Netherlands
- subject: v09i059: analysis of Bnews logfile
- from: allbery@uunet.UU.NET (Brandon S. Allbery - comp.sources.misc)
- Reply-To: jv@mh.nl (Johan Vromans)
-
- Posting-number: Volume 9, Issue 59
- Submitted-by: jv@mh.nl (Johan Vromans)
- Archive-name: scanlog.pl
-
- The following perl program reads a Bnews logfile, and produces reports.
-
- #---------------------------------- cut here ----------------------------------
- #!/bin/sh
- # This is a shell archive. Remove anything before this line,
- # then unpack it by saving it in a file and typing "sh file".
- #
- # Wrapped by Johan Vromans <jv@mhres> on Sun Dec 10 14:53:47 1989
- #
- # This archive contains:
- # scanlog.pl
- #
- # Error checking via wc(1) will be performed.
-
- LANG=""; export LANG
-
- echo x - scanlog.pl
- sed 's/^@//' >scanlog.pl <<'@EOF'
- #!/usr/bin/perl -s
-
- # This program requires perl version 3.0, patchlevel 4 or higher
-
- # @(#)@ scanlog 1.2 - scanlog.pl
-
- # This program scans a BNews logfile (default "/usr/lob/news/log"),
- # and produces statistics.
- #
- # It is able to generate three different reports. The reports are
- # written to standard output. Unrecognized log entries are written to
- # standard error, together with their line numbers in the logfile. These
- # entries usually need manual inspection, or may be used to enhance the
- # program logic.
- #
- # These are the reports:
- #
- # 1. Report of articles received, posted, ... for each host
- #
- # For each news host, the following messages are tallied and
- # reported:
- # Recv'd: # of articles received
- # Posted: # of articles posted
- # Xmit'd: # of articles sent to other hosts
- # Ctrl: # of control messages
- # Cancel: # of cancel messages
- # Junked: # of articles moved to junk
- # Dupl: # of duplicate, hence rejected, articles
- #
- # Report format:
- #
- # News logfile report from Dec 3 05:21 to Dec 10 04:27
- #
- # Host Recv'd Posted Xmit'd Ctrl Cancel Junked Dupl
- # ------- ------- ------- ------- ------- ------- ------- -------
- # hp4nl 11653 0 1140 37 30 48 9
- # local 0 18 11 0 0 0 0
- # ------- ------- ------- ------- ------- ------- ------- -------
- # Total 11653 18 1151 37 30 48 9
- #
- # 2. Report of non-local newsgroups referenced
- #
- # For each newsgroup which was not localized, the references are
- # tallied and reported:
- #
- # Unrecognized newsgroups from Dec 3 05:21 to Dec 10 04:27
- #
- # Newsgroup Refs
- # --------------------------- ----
- # tue.humour 1
- # philnet.general 1
- #
- # 3. Report of new newsgroups created
- #
- # For each newsgroup is indicated if the group was created (i.e.
- # via a newgroup message), and if the spool area was created (i.e.
- # upon receipt of the first article).
- #
- # Newsgroups created from Dec 3 05:21 to Dec 10 04:27
- #
- # Newsgroup created: group dir
- # --------------------------- ----- ---
- # alt.prose.d +
- # alt.recovery + +
- #
- # Usage:
- #
- # scanlog [ options ] [ logfile ]
- #
- # options:
- # -report generate standard report
- # -foreign generate report of unknown groups
- # -new generate report of new groups
- # default is all reports.
- #
- # logfile name of the logfile to use
- # default is "/usr/lib/news/log"
- #
- # Copyright 1989 Johan Vromans
- # Declared public domain in the hope it may be useful to others as
- # well.
-
- # run-time options
- #
- $do_report = defined $report;
- $do_foreign = defined $foreign;
- $do_new = defined $new;
-
- # default values
- $do_report = $do_new = $do_foreign = 1
- unless ($do_report | $do_foreign | $do_new);
-
- # default logfile
- @@ARGV = ("/usr/lib/news/log") if $#ARGV < 0;
-
- $firstdate = $lastdate = "";
-
- # process logfile
- while ( $line = <> ) {
-
- chop ($line);
- @a = split (/\t/, $line);
- if ( $#a >= 2 ) { # need three fields
- $lastdate = $a[0];
- $firstdate = $lastdate unless $firstdate;
- $host = $a[1];
- $used{$host}++;
-
- $msg = join(" ",@a[2..$#a]); # join, in case the message was split
-
- # Analysis of messages
- if ( $msg =~ /^received / ) {
- $received{$host}++;
- }
- elsif ( $msg =~ /^Duplicate / ) {
- $duplicate{$host}++;
- }
- elsif ( $msg =~ /^Cancelling / ) {
- $cancelled{$host}++;
- }
- elsif ( $msg =~ /^Ctl Msg / ) {
- $ctrl{$host}++;
- if ( $' =~ /^(\S+) .*: newgroup / ) {
- $created{$1} = "+";
- $brandnew{$1} = "";
- }
- }
- elsif ( $msg =~ /^linecount expected / ) {
- # ignore
- }
- elsif ( $msg =~ /^No valid newsgroups / ) {
- $junked{$host}++;
- }
- elsif ( $msg =~ /^posted / ) {
- $posted{$host}++;
- }
- elsif ( $msg =~ / newsgroup (\S+) not localized$/ ) {
- $foreign{$1}++;
- }
- elsif ( $msg =~ / sent to / ) {
- $xmit{$host}++;
- }
-
- # Misc
- elsif ( $msg =~ /^make newsgroup (\S+) in dir / ) {
- $brandnew{$1} = "+";
- }
-
- # These entries are ignored
- elsif ( $msg =~ /^Expired article / ) {
- }
- elsif ( $msg =~ /^Can't cancel .* non-existent$/ ) {
- }
-
- # Notify
- else {
- print STDERR "? $. $line\n";
- }
- }
- else {
- printf STDERR "? $. $line\n";
- }
- }
-
- format std_hdr =
- News logfile report from @<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
- "$firstdate to $lastdate"
-
- Host Recv'd Posted Xmit'd Ctrl Cancel Junked Dupl
- @.
- format std_out =
- @@<<<<<< @>>>>>> @>>>>>> @>>>>>> @>>>>>> @>>>>>> @>>>>>> @>>>>>>
- $host, $received, $posted, $xmit, $ctrl, $cancelled, $junked, $duplicate
- @.
-
- if ( $do_report ) {
-
- $^ = "std_hdr";
- $~ = "std_out";
-
- $host = $received = $posted = $ctrl = $cancelled =
- $duplicate = $xmit = $junked = "--------";
- write;
-
- $Treceived = $Tposted = $Tduplicate = $Txmit =
- $Tcancelled = $Tctrl = $Tjunked = 0;
- foreach $host ( sort (keys (%used))) {
- $Treceived += ($received = $received{$host});
- $Tposted += ($posted = $posted{$host});
- $Tduplicate += ($duplicate = $duplicate{$host});
- $Tcancelled += ($cancelled = $cancelled{$host});
- $Tctrl += ($ctrl = $ctrl{$host});
- $Txmit += ($xmit = $xmit{$host});
- $Tjunked += ($junked = $junked{$host});
- write;
- }
-
- $host = $received = $posted = $ctrl = $cancelled =
- $duplicate = $xmit = $junked = "--------";
- write;
-
- $host = "Total";
- $received = $Treceived;
- $posted = $Tposted;
- $duplicate = $Tduplicate;
- $xmit = $Txmit;
- $junked = $Tjunked;
- $ctrl = $Tctrl;
- $cancelled = $Tcancelled;
- write;
- }
-
- format for_hdr =
- Unrecognized newsgroups from @<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
- "$firstdate to $lastdate"
-
- Newsgroup Refs
- ---------------------------- ------
- @.
- format for_out =
- @@<<<<<<<<<<<<<<<<<<<<<<<<<<< @>>>>>
- $group, $refs
- @.
-
- if ( $do_foreign) {
-
- $^ = "for_hdr";
- $~ = "for_out";
- $- = 0;
-
- @foreign = sort (keys (%foreign));
- if ( $#foreign >= 0 ) {
-
- foreach $group ( @foreign ) {
- $refs = $foreign{$group};
- write;
- }
- }
- }
-
- format new_hdr =
- Newsgroups created from @<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
- "$firstdate to $lastdate"
-
- Newsgroup Created: group dir
- ---------------------------- ----- ---
- @.
- format new_out =
- @@<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< @ @
- $group, $cr, $dir
- @.
-
- if ( $do_new ) {
-
- $^ = "new_hdr";
- $~ = "new_out";
- $- = 0;
-
- @brandnew = sort (keys (%brandnew));
- if ( $#brandnew >= 0 ) {
-
- foreach $group ( @brandnew ) {
-
- $dir = $brandnew{$group};
- $cr = $created{$group};
- write;
- }
- }
- }
- @EOF
- set `wc -lwc <scanlog.pl`
- if test $1$2$3 != 26910176847
- then
- echo ERROR: wc results of scanlog.pl are $* should be 269 1017 6847
- fi
-
- chmod 444 scanlog.pl
-
- exit 0
- --
- Johan Vromans jv@mh.nl via internet backbones
- Multihouse Automatisering bv uucp: ..!{uunet,hp4nl}!mh.nl!jv
- Doesburgweg 7, 2803 PL Gouda, The Netherlands phone/fax: +31 1820 62944/62500
- ------------------------ "Arms are made for hugging" -------------------------
-
-